From 932535d4445be09faa919b0f85d7b35aca225430 Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Mon, 10 Jun 2013 15:15:22 +0200 Subject: [PATCH] GtkListBox: Clean up DnD code Unhighlight rows if they are removed. Drop the automatic drag motion based auto-scrolling. This is not really right, as it e.g. hardcodes auto-scroll regions and assumes we're the only widget inside the scrolled container. Its also imho in the wrong place, autoscrolling if any should be done on the scrolled-window or viewport. All the removed code is implementable outside Gtk+ though. --- gtk/gtklistbox.c | 91 ++---------------------------------------------- 1 file changed, 3 insertions(+), 88 deletions(-) diff --git a/gtk/gtklistbox.c b/gtk/gtklistbox.c index 42987a5ffb..55402c310d 100644 --- a/gtk/gtklistbox.c +++ b/gtk/gtklistbox.c @@ -63,7 +63,6 @@ struct _GtkListBoxPrivate /* DnD */ GtkListBoxRow *drag_highlighted_row; - guint auto_scroll_timeout_id; }; struct _GtkListBoxRowPrivate @@ -154,11 +153,6 @@ static void gtk_list_box_real_size_allocate (GtkWidget static void gtk_list_box_real_drag_leave (GtkWidget *widget, GdkDragContext *context, guint time_); -static gboolean gtk_list_box_real_drag_motion (GtkWidget *widget, - GdkDragContext *context, - gint x, - gint y, - guint time_); static void gtk_list_box_real_activate_cursor_row (GtkListBox *list_box); static void gtk_list_box_real_toggle_cursor_row (GtkListBox *list_box); static void gtk_list_box_real_move_cursor (GtkListBox *list_box, @@ -259,9 +253,6 @@ gtk_list_box_finalize (GObject *obj) GtkListBox *list_box = GTK_LIST_BOX (obj); GtkListBoxPrivate *priv = list_box->priv; - if (priv->auto_scroll_timeout_id != ((guint) 0)) - g_source_remove (priv->auto_scroll_timeout_id); - if (priv->sort_func_target_destroy_notify != NULL) priv->sort_func_target_destroy_notify (priv->sort_func_target); if (priv->filter_func_target_destroy_notify != NULL) @@ -310,7 +301,6 @@ gtk_list_box_class_init (GtkListBoxClass *klass) widget_class->get_preferred_width_for_height = gtk_list_box_real_get_preferred_width_for_height; widget_class->size_allocate = gtk_list_box_real_size_allocate; widget_class->drag_leave = gtk_list_box_real_drag_leave; - widget_class->drag_motion = gtk_list_box_real_drag_motion; container_class->add = gtk_list_box_real_add; container_class->remove = gtk_list_box_real_remove; container_class->forall = gtk_list_box_real_forall_internal; @@ -1416,6 +1406,9 @@ gtk_list_box_real_remove (GtkContainer* container, GtkWidget* child) priv->active_row = NULL; } + if (row == priv->drag_highlighted_row) + gtk_list_box_drag_unhighlight_row (list_box); + next = gtk_list_box_get_next_visible (list_box, row->priv->iter); gtk_widget_unparent (child); g_sequence_remove (row->priv->iter); @@ -1693,86 +1686,8 @@ static void gtk_list_box_real_drag_leave (GtkWidget *widget, GdkDragContext *context, guint time_) { GtkListBox *list_box = GTK_LIST_BOX (widget); - GtkListBoxPrivate *priv = list_box->priv; gtk_list_box_drag_unhighlight_row (list_box); - if (priv->auto_scroll_timeout_id != 0) { - g_source_remove (priv->auto_scroll_timeout_id); - priv->auto_scroll_timeout_id = 0; - } -} - -typedef struct -{ - GtkListBox *list_box; - gint move; -} MoveData; - -static void -move_data_free (MoveData *data) -{ - g_slice_free (MoveData, data); -} - -static gboolean -drag_motion_timeout (MoveData *data) -{ - GtkListBox *list_box = data->list_box; - GtkListBoxPrivate *priv = list_box->priv; - - gtk_adjustment_set_value (priv->adjustment, - gtk_adjustment_get_value (priv->adjustment) + - gtk_adjustment_get_step_increment (priv->adjustment) * data->move); - return TRUE; -} - -static gboolean -gtk_list_box_real_drag_motion (GtkWidget *widget, GdkDragContext *context, - gint x, gint y, guint time_) -{ - GtkListBox *list_box = GTK_LIST_BOX (widget); - GtkListBoxPrivate *priv = list_box->priv; - int move; - MoveData *data; - gdouble size; - - /* Auto-scroll during Dnd if cursor is moving into the top/bottom portion of the - * box. */ - if (priv->auto_scroll_timeout_id != 0) - { - g_source_remove (priv->auto_scroll_timeout_id); - priv->auto_scroll_timeout_id = 0; - } - - if (priv->adjustment == NULL) - return FALSE; - - /* Part of the view triggering auto-scroll */ - size = 30; - move = 0; - - if (y < (gtk_adjustment_get_value (priv->adjustment) + size)) - { - /* Scroll up */ - move = -1; - } - else if (y > ((gtk_adjustment_get_value (priv->adjustment) + gtk_adjustment_get_page_size (priv->adjustment)) - size)) - { - /* Scroll down */ - move = 1; - } - - if (move == 0) - return FALSE; - - data = g_slice_new0 (MoveData); - data->list_box = list_box; - - priv->auto_scroll_timeout_id = - g_timeout_add_full (G_PRIORITY_DEFAULT, 150, (GSourceFunc)drag_motion_timeout, - data, (GDestroyNotify) move_data_free); - - return FALSE; } static void -- 2.30.2